package Vue;

import java.awt.Toolkit;

import javax.swing.JTextField;
import javax.swing.text.AbstractDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;

/**
 * TextField pouvant être limité en longueur.
 * 
 */
public class LimitedTextField extends JTextField {

	
	private static final long serialVersionUID = 1L;

	/**
	 * Instancie l'objet LimitedTextField
	 * @param maxLength définit la longueur maximale du champ
	 */
	public LimitedTextField(int maxLength) {
		super();
		AbstractDocument doc = (AbstractDocument) getDocument();
		doc.setDocumentFilter(new TextLimiter(maxLength));
	}

	/**
	 * Text limiter utilisé pour limiter le field.
	 * 
	 */
	private class TextLimiter extends DocumentFilter {
		/** Limite de caracteres du champs */
		private int max;
		
		/**
		 * Instancie un TextLimiter
		 * @param max définit le nombre maximum de caracteres
		 */
		public TextLimiter(int max) {
			this.max = max;
		}
		
		public void insertString(DocumentFilter.FilterBypass fb, int offset,
				String str, AttributeSet attr) throws BadLocationException {

			replace(fb, offset, 0, str, attr);
		}

		public void replace(DocumentFilter.FilterBypass fb, int offset,
				int length, String str, AttributeSet attrs)
				throws BadLocationException {
			int newLength = fb.getDocument().getLength() - length
					+ str.length();

			if (newLength <= max) {
				fb.replace(offset, length, str, attrs);
			} else {
				Toolkit.getDefaultToolkit().beep();
			}
		}
	}

}